"""
Python基础学习 - 多态示例代码
=========================

本文件展示了Python中多态的概念：
1. 多态的定义 - 不同类的对象对同一消息做出不同的响应
2. 方法重写 - 实现多态的关键
3. 统一接口 - 通过共同的基类处理不同类型的对象

多态是面向对象编程的重要特性。
在实际工作中，多态常用于处理具有相似行为但具体实现不同的对象。
例如，在图形处理系统中，Shape类可以有Circle、Rectangle、Triangle等子类，
它们都有draw()方法，但具体绘制方式不同。
通过多态，我们可以统一处理这些图形对象，
而不需要关心它们的具体类型。
"""

# 多态示例
# 多态允许不同类的对象对同一消息做出不同的响应
# 在Python中，多态通过继承和方法重写实现
class Animal:
    """动物基类 - 演示多态的概念

    这是一个抽象基类，定义了动物的通用接口。
    """
    
    # 定义通用接口方法
    # 子类需要重写这个方法以提供具体实现
    def make_sound(self):
        """发出声音方法 - 子类需要重写此方法

        Returns:
            str: 动物的声音
        """
        pass  # 基类中不提供具体实现

class Dog(Animal):
    """狗类 - 继承自Animal类"""
    
    # 重写父类方法 - 提供狗特有的实现
    def make_sound(self):
        """重写发出声音方法 - 狗的叫声

        Returns:
            str: 狗的叫声
        """
        return "汪汪!"

class Cat(Animal):
    """猫类 - 继承自Animal类"""
    
    # 重写父类方法 - 提供猫特有的实现
    def make_sound(self):
        """重写发出声音方法 - 猫的叫声

        Returns:
            str: 猫的叫声
        """
        return "喵喵!"

class Bird(Animal):
    """鸟类 - 继承自Animal类"""
    
    # 重写父类方法 - 提供鸟特有的实现
    def make_sound(self):
        """重写发出声音方法 - 鸟的叫声

        Returns:
            str: 鸟的叫声
        """
        return "啾啾!"

def polymorphism_demo():
    print("\n=== 多态示例 ===")
    
    # 创建不同类型的动物对象
    # 虽然都是Animal类型，但实际是不同的子类实例
    animals = [Dog(), Cat(), Bird()]
    
    # 多态调用 - 同样的方法调用，不同的行为
    # 每个对象根据自己的类型执行相应的方法实现
    for animal in animals:
        # animal.make_sound()会根据animal的实际类型调用相应的方法
        # 这就是多态的体现：同样的接口，不同的实现
        print(f"{type(animal).__name__}: {animal.make_sound()}")

# 主函数 - 程序的入口点
if __name__ == "__main__":
    polymorphism_demo()